"""
queue.Queue() 是 Python 标准库 queue 模块中的一个类，用于实现线程安全的队列。
队列是一种先进先出（FIFO, First In First Out）的数据结构，适用于在多个线程或
进程间安全地传递消息或数据。

以下是 queue.Queue() 的一些基本用法：
"""
import queue

# 创建一个无限大的队列
q = queue.Queue(maxsize=2)

# 创建一个最大容量为10的队列
q_limited = queue.Queue(maxsize=10)

"""
入队（Enqueue）
使用 put() 方法向队列中添加元素。如果队列已满（当设置了最大容量时），则 put() 方法将阻塞，直到队列中有空间可用。
"""

q.put("a")
q.put("b")

"""
出队（Dequeue）
使用 get() 方法从队列中移除并返回一个元素。如果队列为空，则 get() 方法将阻塞，直到队列中有元素可用。
"""
# print(q.get())
# print(q.get())
# print(q.get())

"""
查看队列状态
qsize() 方法返回队列中元素的数量。
empty() 方法在队列为空时返回 True，否则返回 False。
full() 方法在队列已满时（设置了最大容量时）返回 True，否则返回 False。
"""
print(q.qsize())
print(q.empty())

"""
非阻塞的入队和出队
默认情况下，put() 和 get() 方法在队列满或空时会阻塞。但你可以通过设置
 block 参数为 False 来实现非阻塞操作。
这会使这些方法在队列状态不允许操作时立即返回一个 
queue.Full 或 queue.Empty 异常。
"""

try:
    q.put('c', block=False)
except queue.Full:
    print("队列已满，无法添加更多元素")

try:
    item = q.get(block=False)
    print(item)
    item = q.get(block=False)
    print(item)
    item = q.get(block=False)
    print(item)
except queue.Empty:
    print("队列为空，无法取出元素")


